package br.com.sms.enuns;

import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;

public enum UF implements Comparable<UF>{

	DF("DF", "Distrito Federal"),
	GO("GO", "Goiás"),
	TO("TO", "Tocantis"),
	MT("MT", "Mato Grosso"),
	MS("MS", "Mato Grosso do Sul"),
	
	MG("MG", "Minas Gerais"),
	SP("SP", "São Paulo"),
	RJ("RJ", "Rio de Janeiro"),
	ES("ES", "Espírito Santo"),
	
	CE("CE", "Ceará"),
	PE("PE", "Pernambuco"),
	PB("PB", "Paraíba"),
	MA("MA", "Maranhão"),
	RN("RN", "Rio Grande do Norte"),
	SE("SE", "Sergipe"),
	AL("AL", "Alagoas"),
	PA("PA", "Pará"),
	BA("BA", "Bahia"),
	PI("PI", "Piauí"),
	
	
	AM("AM", "Amazonas"),
	RR("RR", "Roraima"),
	RO("RO", "Rondôndia"),
	AC("AC", "Acre"),
	AP("AP", "Amapá"),
	
	PR("PR", "Paraná"),
	SC("SC", "Santa Catarina"),
	RS("RS", "Rio Grande do Sul");
	
	String sigla;
	String descricao;
	
	private UF(String sigla, String descricao){
		this.sigla = sigla;
		this.descricao = descricao;
	}
	
	
	public static UF newInstance(String sigla){
		//centro-oeste
		if(sigla.equals("DF"))
			return UF.DF;
		if(sigla.equals("GO"))
			return UF.GO;
		if(sigla.equals("TO"))
			return UF.TO;
		if(sigla.equals("DF"))
			return UF.DF;
		if(sigla.equals("MT"))
			return UF.MT;
		if(sigla.equals("MS"))
			return UF.MS;
		
		//sudeste
		if(sigla.equals("MG"))
			return UF.MG;
		if(sigla.equals("SP"))
			return UF.SP;
		if(sigla.equals("RJ"))
			return UF.RJ;
		if(sigla.equals("ES"))
			return UF.ES;
		
		//nordeste
		if(sigla.equals("CE"))
			return UF.CE;
		if(sigla.equals("PE"))
			return UF.PE;
		if(sigla.equals("PB"))
			return UF.PB;
		if(sigla.equals("MA"))
			return UF.MA;
		if(sigla.equals("RN"))
			return UF.RN;
		if(sigla.equals("SE"))
			return UF.SE;
		if(sigla.equals("AL"))
			return UF.AL;
		if(sigla.equals("PA"))
			return UF.PA;
		if(sigla.equals("BA"))
			return UF.BA;
		if(sigla.equals("PI"))
			return UF.PI;
		
		//norte
		if(sigla.equals("AM"))
			return UF.AM;
		if(sigla.equals("RR"))
			return UF.RR;
		if(sigla.equals("RO"))
			return UF.RO;
		if(sigla.equals("AC"))
			return UF.AC;
		if(sigla.equals("AP"))
			return UF.AP;
		
		//sul
		if(sigla.equals("PR"))
			return UF.PR;
		if(sigla.equals("SC"))
			return UF.SC;
		if(sigla.equals("RS"))
			return UF.RS;
		
		
		return null;
		
	}
	
	
	/**
	 * Retorna uma lista com todos as UF cadastradas
	 * @return
	 */
	@SuppressWarnings("unchecked")
	public static List<UF> getListaUF(){
		List<UF> lista = new ArrayList<UF>();
		
		for(UF uf : UF.values()){
			lista.add(uf);
		}
		
		Collections.sort(lista, new Comparator(){

			public int compare(Object o1, Object o2) {
				if(o1 instanceof UF && o2 instanceof UF){
					UF uf1 = (UF) o1;
					UF uf2 = (UF) o2;
					
					return uf1.getSigla().compareTo(uf2.getSigla());
				}
				return 0;
			}
			
		});
		
		return lista;
	}

	public String getSigla() {
		return sigla;
	}

	public void setSigla(String sigla) {
		this.sigla = sigla;
	}

	public String getDescricao() {
		return descricao;
	}

	public void setDescricao(String descricao) {
		this.descricao = descricao;
	}
	
	
}
